package org.simpleframework.aop.aspect;

import java.lang.reflect.Method;

/**
 * @ClassName DefaultAspect
 * @Description
 * @Author 47980
 * @Date 2020/8/10 19:26
 * @Version V_1.0
 **/
public abstract class DefaultAspect {
    /**
     * 被代理方法执行前
     * @param targetClass 被代理的目标列
     * @param method 被代理的目标方法
     * @param args 被代理的目标方法的参数
     * @throws Throwable
     */
    public void before(Class<?> targetClass, Method method, Object[] args) throws Throwable {}

    /**
     * 被代理方法执行之后
     *
     * @param targetClass 被代理的目标列
     * @param method 被代理的目标方法
     * @param args 被代理的目标方法的参数
     * @param returnValue 被代理方法的返回值
     * @throws Throwable
     */
    public Object afterReturning(Class<?> targetClass, Method method, Object[] args, Object returnValue) throws Throwable {
        return returnValue;
    }

    /**
     * 被代理方法执行抛错后
     * @param targetClass 被代理的目标列
     * @param method 被代理的目标方法
     * @param args 被代理的目标方法的参数
     * @param e 被代理的目标方法的抛出异常
     * @throws Throwable
     */
    public void afterThrowing(Class<?> targetClass, Method method, Object[] args, Throwable e) throws Throwable {}
}
